﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	ПроверитьВозможностьИспользованияФормы(Отказ);
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	ИнициализироватьРеквизитыФормы();
	
	ИнициализироватьСвойстваФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	УстановитьПорядковыйНомерПерехода(1);
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	
	ТекстПредупреждения = НСтр("ru = 'Прервать настройку параметров подключения для синхронизации данных?'");
	ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(
		ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СпособНастройкиПодключенияПриИзменении(Элемент)
	
	ПриИзмененииСпособНастройкиПодключения();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьНастройкиПодключенияИзФайлаПриИзменении(Элемент)
	
	ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла();
	
КонецПроцедуры

&НаКлиенте
Процедура ИмяФайлаНастроекПодключенияДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	НастройкиДиалога = Новый Структура;
	НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл с настройками подключения'"));
	НастройкиДиалога.Вставить("Фильтр",    НСтр("ru = 'Файл настроек подключения (*.xml)'") + "|*.xml");
	
	ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекПодключенияДляЗагрузки", СтандартнаяОбработка, НастройкиДиалога);
	
КонецПроцедуры

&НаКлиенте
Процедура ИмяФайлаНастроекXDTOКорреспондентаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	НастройкиДиалога = Новый Структура;
	НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл с настройками корреспондента'"));
	НастройкиДиалога.Вставить("Фильтр",    НСтр("ru = 'Файл настроек корреспондента (*.xml)'") + "|*.xml");
	
	ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекXDTOКорреспондента", СтандартнаяОбработка, НастройкиДиалога);
	
КонецПроцедуры

&НаКлиенте
Процедура ИмяФайлаНастроекПодключенияДляВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	НастройкиДиалога = Новый Структура;
	НастройкиДиалога.Вставить("Режим",     РежимДиалогаВыбораФайла.Сохранение);
	НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите файл для сохранения настроек подключения'"));
	НастройкиДиалога.Вставить("Фильтр",    НСтр("ru = 'Файл настроек подключения (*.xml)'") + "|*.xml");
	
	ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекПодключенияДляВыгрузки", СтандартнаяОбработка, НастройкиДиалога);
	
КонецПроцедуры

&НаКлиенте
Процедура ВидПодключенияВнешнееСоединениеПриИзменении(Элемент)
	
	ПриИзмененииВидПодключения();
	
КонецПроцедуры

&НаКлиенте
Процедура ВидПодключенияИнтернетПриИзменении(Элемент)
	
	ПриИзмененииВидПодключения();
	
КонецПроцедуры

&НаКлиенте
Процедура ВидПодключенияОбычныеКаналыСвязиПриИзменении(Элемент)
	
	ПриИзмененииВидПодключения();
	
КонецПроцедуры

&НаКлиенте
Процедура ВидПодключенияПассивныйРежимПриИзменении(Элемент)
	
	ПриИзмененииВидПодключения();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиFILEКаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(ЭтотОбъект, "ОбычныеКаналыСвязиFILEКаталог", СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСоединениеКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(ЭтотОбъект, "ВнешнееСоединениеКаталогИнформационнойБазы", СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиFILEИспользованиеПриИзменении(Элемент)
	
	ПриИзмененииОбычныеКаналыСвязиFILEИспользование();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиFTPИспользованиеПриИзменении(Элемент)
	
	ПриИзмененииОбычныеКаналыСвязиFTPИспользование();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиEMAILИспользованиеПриИзменении(Элемент)
	
	ПриИзмененииОбычныеКаналыСвязиEMAILИспользование();
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйПриИзменении(Элемент)
	
	ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы();
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйПриИзменении(Элемент)
	
	ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы();
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСоединениеВидАутентификации1СПредприятиеПриИзменении(Элемент)
	
	ПриИзмененииВнешнееСоединениеВидАутентификации();
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСоединениеВидАутентификацииОперационнаяСистемаПриИзменении(Элемент)
	
	ПриИзмененииВнешнееСоединениеВидАутентификации();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиАрхивироватьФайлыПриИзменении(Элемент)
	
	ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиИспользоватьПарольАрхиваПриИзменении(Элемент)
	
	ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаПриИзменении(Элемент)
	
	ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияПриИзменении(Элемент)
	
	ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения();
	
КонецПроцедуры

&НаКлиенте
Процедура ИсправитьДублированиеНастроекСинхронизацииПриИзменении(Элемент)
	
	Если ИсправитьДублированиеНастроекСинхронизации И УзелКорреспондентаЕстьВЭтойБазе Тогда
		
		ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеУдаленияРазрешений", ЭтотОбъект, УзелОбмена);
		Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
			Запросы = ОбменДаннымиВызовСервера.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(УзелОбмена);
			МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент");
			МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, Неопределено, ОповещениеОЗакрытии);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеУдаленияРазрешений(Результат, УзелИнформационнойБазы) Экспорт
	
	Если НЕ Результат = КодВозвратаДиалога.ОК Тогда
		ИсправитьДублированиеНастроекСинхронизации = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура БольшеНастроек(Команда)
	
	БольшеНастроекВидимость = Ложь;

	Элементы.БольшеНастроек.Видимость = Ложь;
	Элементы.ГруппаСпособыНастройкиПодключения.Видимость = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура НастроитьВручную(Команда)
	
	СпособНастройкиПодключенияВСервисе = "ИнтернетВручную";
	
	Если НастройкаXDTO Тогда 
	
		Элементы.ВидПодключенияВнешнееСоединение.Видимость  = ДоступныеВидыТранспорта.Свойство("COM");
		Элементы.ВидПодключенияИнтернет.Видимость           = ДоступныеВидыТранспорта.Свойство("WS");
		Элементы.ВидПодключенияОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE")
			Или ДоступныеВидыТранспорта.Свойство("FTP")
			Или ДоступныеВидыТранспорта.Свойство("EMAIL");
			
		Элементы.ВидПодключенияПассивныйРежим.Видимость      = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим");
		
		Элементы.ГруппаФайлНастройкиПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим");
		Элементы.ГруппаФайлНастройкиОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE")
			Или ДоступныеВидыТранспорта.Свойство("FTP")
			Или ДоступныеВидыТранспорта.Свойство("EMAIL");
		
		Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаВидыПодключения;
		Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияСпособыНастройкиПодключения;
		ПриИзмененииВидПодключения();
		
	Иначе
		
		ПриИзмененииСпособНастройкиПодключения();
	    ИзменитьПорядковыйНомерПерехода(+1);

	КонецЕсли;
		
КонецПроцедуры

&НаКлиенте
Процедура ПриложенияВСервисеПриАктивизацииСтроки(Элемент)
	
	Если Элементы.ПанельОсновная.ТекущаяСтраница <> Элементы.СтраницаСпособНастройкиПодключения Тогда
		Возврат;
	КонецЕсли;
	
	ВыбратьНаилучшийСпособНастройкиПодключения();
		
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьНаилучшийСпособНастройкиПодключения()
		
	ТекущаяСтрока = Элементы.ПриложенияВСервисе.ТекущиеДанные;
	
	Если ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ДоступенExchangeAdministrationManage_3_0_1_1
		И ТекущаяСтрока.ДоступенExchangeAdministrationManage_3_0_1_1 Тогда
		
		СпособНастройкиПодключенияВСервисе = "ИнтернетАвто";
		Элементы.СпособНастройкиПодключенияИнтернет.Видимость = Истина;
		
	Иначе
		
		СпособНастройкиПодключенияВСервисе = "МенеджерСервиса";
		Элементы.СпособНастройкиПодключенияИнтернет.Видимость = Ложь;
		
	КонецЕсли;
	
	ПриИзмененииСпособНастройкиПодключения();

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура КомандаДалее(Команда)
	
	ИзменитьПорядковыйНомерПерехода(+1);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаНазад(Команда)
	
	Если ВидПодключения = "ПассивныйРежим" Тогда 
		ИзменитьПорядковыйНомерПерехода(-5);
		Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияСпособыНастройкиПодключения;
	Иначе
		ИзменитьПорядковыйНомерПерехода(-1)	
	КонецЕсли;
		
КонецПроцедуры

&НаКлиенте
Процедура КомандаГотово(Команда)
	
	ЗакрытьФормуБезусловно = Истина;
	
	Результат = Новый Структура;
	Результат.Вставить("УзелОбмена", УзелОбмена);
	Результат.Вставить("ЕстьДанныеДляСопоставления", ЕстьДанныеДляСопоставления);
	
	Если МодельСервиса Тогда
		Результат.Вставить("ОбластьДанныхКорреспондента",  ОбластьДанныхКорреспондента);
		Результат.Вставить("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе);
	КонецЕсли;
	
	Результат.Вставить("ПассивныйРежим", ВидПодключения = "ПассивныйРежим");
	
	Закрыть(Результат);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаОтмена(Команда)
	
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаСправка(Команда)
	
	ОткрытьСправкуФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСписокДоступныхПриложений(Команда)
	
	НачатьПолучениеСпискаПриложенийДляПодключения();
	
КонецПроцедуры

&НаКлиенте
Процедура ПараметрыДоступаВИнтернет(Команда)
	
	ОбменДаннымиКлиент.ОткрытьФормуПараметровПроксиСервера();
	
КонецПроцедуры

&НаКлиенте
Процедура ПодробноеОписаниеСинхронизацииДанных(Команда)
	
	ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(ПодробнаяИнформацияПоОбмену);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаНазадСпособНастройкиПодключения(Команда)
	
	Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаМоиПриложения;
	Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияНачало;
			
КонецПроцедуры

&НаКлиенте
Процедура КомандаДалееСпособНастройкиПодключения(Команда)
	
	Если ВидПодключения = "Интернет" Тогда
		
		СпособНастройкиПодключенияВСервисе = "ИнтернетВручную";
		ПриИзмененииСпособНастройкиПодключения();
		
		ИзменитьПорядковыйНомерПерехода(+1);
		
		Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаМоиПриложения;
			
	ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда
		
		Если ПустаяСтрока(ИмяФайлаНастроекXDTOКорреспондента) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Выберите файл с настройками программы-корреспондента.'"),
				, "ИмяФайлаНастроекXDTOКорреспондента");
		Иначе
			ИзменитьПорядковыйНомерПерехода(+3);			
		КонецЕсли;
		
	КонецЕсли;	
		
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область ПолучениеСпискаПриложенийДляПодключения

&НаКлиенте
Процедура НачатьПолучениеСпискаПриложенийДляПодключения()
	
	Элементы.ПанельПриложенияВСервисе.Видимость = Истина;
	Элементы.ПриложенияВСервисе.Доступность = Ложь;
	Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Ложь;
	
	Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОжидание;
	ПодключитьОбработчикОжидания("ПриНачалеПолученияСпискаПриложенийДляПодключения", 0.1, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриНачалеПолученияСпискаПриложенийДляПодключения()
	
	ПараметрыОбработчикаПолученияСпискаПриложений = Неопределено;
	ПродолжитьОжидание = Ложь;
	
	ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание);
		
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(
			ПараметрыОбработчикаОжиданияПолученияСпискаПриложений);
			
		ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения",
			ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина);
	Иначе
		ПриЗавершенииПолученияСпискаПриложенийДляПодключения();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключения()
	
	ПродолжитьОжидание = Ложь;
	ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений);
		
		ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения",
			ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина);
	Иначе
		ПараметрыОбработчикаОжиданияПолученияСпискаПриложений = Неопределено;
		ПриЗавершенииПолученияСпискаПриложенийДляПодключения();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключения()
	
	Отказ = Ложь;
	ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ);
	
	Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Истина;
	Элементы.ПриложенияВСервисе.Доступность = Истина;
	
	Если Отказ Тогда
		Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОшибка;
	Иначе
		Элементы.ПанельПриложенияВСервисе.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание)
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	
	Если МодульПомощникНастройки = Неопределено Тогда
		ПродолжитьОжидание = Ложь;
		Возврат;
	КонецЕсли;
	
	ПараметрыПомощника = Новый Структура;
	ПараметрыПомощника.Вставить("Режим",				"НеНастроенныеОбмены");
	ПараметрыПомощника.Вставить("ИмяПланаОбмена",		ИмяПланаОбмена);
	
	Если ЗначениеЗаполнено(ФорматОбмена) Тогда
		ПараметрыПомощника.Вставить("ФорматОбмена", ФорматОбмена);
	Иначе
		ПараметрыПомощника.Вставить("ФорматОбмена", ИмяПланаОбмена);
	КонецЕсли;
	ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки);
	
	МодульПомощникНастройки.ПриНачалеПолученияСпискаПриложений(ПараметрыПомощника,
		ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание)
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	
	Если МодульПомощникНастройки = Неопределено Тогда
		ПродолжитьОжидание = Ложь;
		Возврат;
	КонецЕсли;
	
	МодульПомощникНастройки.ПриОжиданииПолученияСпискаПриложений(
		ПараметрыОбработчика, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервере
Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ = Ложь)
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	
	Если МодульПомощникНастройки = Неопределено Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	
	СтатусЗавершения = Неопределено;
	МодульПомощникНастройки.ПриЗавершенииПолученияСпискаПриложений(
		ПараметрыОбработчикаПолученияСпискаПриложений, СтатусЗавершения);
		
	Если СтатусЗавершения.Отказ Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	
	ТаблицаПриложений = СтатусЗавершения.Результат; // ТаблицаЗначений
	
	ТаблицаПриложений.Колонки.Добавить("КартинкаРежимИспользования", Новый ОписаниеТипов("Число"));
	ТаблицаПриложений.ЗаполнитьЗначения(1, "КартинкаРежимИспользования"); // приложение в Интернете
	ПриложенияВСервисе.Загрузить(ТаблицаПриложений);
	
КонецПроцедуры

#КонецОбласти

#Область ПроверкаПараметровПодключения

&НаКлиенте
Процедура ПриНачалеПроверкиПодключенияOnline()
	
	ПродолжитьОжидание = Истина;
	
	Если ВидПодключения = "Интернет" Тогда
		ПриНачалеПроверкиПодключенияНаСервере("WS", ПродолжитьОжидание);
	ИначеЕсли ВидПодключения = "ВнешнееСоединение" Тогда
		ПриНачалеПроверкиПодключенияНаСервере("COM", ПродолжитьОжидание);
	КонецЕсли;
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(
			ПараметрыОбработчикаОжиданияПроверкиПодключения);
			
		ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline",
			ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПриЗавершенииПроверкиПодключенияOnline();
	КонецЕсли;
	
КонецПроцедуры
	
&НаКлиенте
Процедура ПриОжиданииПроверкиПодключенияOnline()
	
	ПродолжитьОжидание = Ложь;
	ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения);
		
		ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline",
			ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПараметрыОбработчикаОжиданияПроверкиПодключения = Неопределено;
		ПриЗавершенииПроверкиПодключенияOnline();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииПроверкиПодключенияOnline()
	
	СообщениеОбОшибке = "";
	ПроверкаПодключенияВыполнена = Ложь;
	ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке);
	
	Если ПроверкаПодключенияВыполнена Тогда
		ИзменитьПорядковыйНомерПерехода(+1);
	Иначе
		ИзменитьПорядковыйНомерПерехода(-1);
		
		Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке);
		Иначе
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'"));
		КонецЕсли;
	КонецЕсли;
		
КонецПроцедуры

&НаКлиенте
Процедура ПриНачалеПроверкиПодключенияOffline()
	
	Если ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено Тогда	
		
		ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Новый Структура;
		
		Если ОбычныеКаналыСвязиFILEИспользование Тогда
			ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("FILE");
		КонецЕсли;
		
		Если ОбычныеКаналыСвязиFTPИспользование Тогда
			ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("FTP");
		КонецЕсли;
		
		Если ОбычныеКаналыСвязиEMAILИспользование Тогда
			ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("EMAIL");
		КонецЕсли;
		
	КонецЕсли;
	
	ПроверяемыйВидТранспорта = Неопределено;
	Для Каждого ЭлементПроверки Из ОчередьПроверкиПодключенияОбычныеКаналыСвязи Цикл
		ПроверяемыйВидТранспорта = ЭлементПроверки.Ключ;
		Прервать;
	КонецЦикла;
	
	ПродолжитьОжидание = Истина;
	ПриНачалеПроверкиПодключенияНаСервере(ПроверяемыйВидТранспорта, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(
			ПараметрыОбработчикаОжиданияПроверкиПодключения);
			
		ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOffline",
			ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПриЗавершенииПроверкиПодключенияOffline();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОжиданииПроверкиПодключенияOffline()
	
	ПродолжитьОжидание = Ложь;
	ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOffline",
			ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПараметрыОбработчикаОжиданияПроверкиПодключения = Неопределено;
		ПриЗавершенииПроверкиПодключенияOffline();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииПроверкиПодключенияOffline()
	
	СообщениеОбОшибке = "";
	ПроверкаПодключенияВыполнена = Ложь;
	ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке);
	
	Если ПроверкаПодключенияВыполнена Тогда
		
		ПроверяемыйВидТранспорта = Неопределено;
		Для Каждого ЭлементПроверки Из ОчередьПроверкиПодключенияОбычныеКаналыСвязи Цикл
			ПроверяемыйВидТранспорта = ЭлементПроверки.Ключ;
			Прервать;
		КонецЦикла;
		ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Удалить(ПроверяемыйВидТранспорта);
		
		Если ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Количество() > 0 Тогда
			ПриНачалеПроверкиПодключенияOffline();
		Иначе
			ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено;
			ИзменитьПорядковыйНомерПерехода(+1);
		КонецЕсли;
		
	Иначе
		
		ПроверяемыйВидТранспорта = Неопределено;
		ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено;
		ИзменитьПорядковыйНомерПерехода(-1);
		
		Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке);
		Иначе
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения %1.'"), ПроверяемыйВидТранспорта));
		КонецЕсли;
				
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриНачалеПроверкиПодключенияВМоделиСервиса()
	
	ПродолжитьОжидание = Истина;
	ПриНачалеПроверкиПодключенияВМоделиСервисаНаСервере(ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(
			ПараметрыОбработчикаОжиданияПроверкиПодключения);
			
		ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса",
			ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПриЗавершенииПроверкиПодключенияВМоделиСервиса();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОжиданииПроверкиПодключенияВМоделиСервиса()
	
	ПродолжитьОжидание = Ложь;
	ПриОжиданииПроверкиПодключенияВМоделиСервисаНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения);
		
		ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса",
			ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПриЗавершенииПроверкиПодключенияВМоделиСервиса();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииПроверкиПодключенияВМоделиСервиса()
	
	СообщениеОбОшибке = "";
	ПроверкаПодключенияВыполнена = Ложь;
	ПриЗавершенииПроверкиПодключенияВМоделиСервисаНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке);
	
	Если ПроверкаПодключенияВыполнена Тогда
		ИзменитьПорядковыйНомерПерехода(+1);
	Иначе
		ИзменитьПорядковыйНомерПерехода(-1);
		
		Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке);
		Иначе
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'"));
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриНачалеПроверкиПодключенияНаСервере(ВидТранспорта, ПродолжитьОжидание)
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	
	СтруктураНастроек = Новый Структура;
	ЗаполнитьСтруктуруПараметровПодключенияПомощника(СтруктураНастроек, Истина);
	СтруктураНастроек.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспорта];
	
	МодульПомощникНастройки.ПриНачалеПроверкиПодключения(
		СтруктураНастроек, ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание)
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	
	ПродолжитьОжидание = Ложь;
	МодульПомощникНастройки.ПриОжиданииПроверкиПодключения(ПараметрыОбработчика, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервере
Процедура ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке = "")
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	
	СтатусЗавершения = Неопределено;
	МодульПомощникНастройки.ПриЗавершенииПроверкиПодключения(ПараметрыОбработчикаПроверкиПодключения, СтатусЗавершения);
		
	Если СтатусЗавершения.Отказ Тогда
		ПроверкаПодключенияВыполнена = Ложь;
		СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке;
		Возврат;
	Иначе
		ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПодключениеУстановлено
			И СтатусЗавершения.Результат.ПодключениеРазрешено;
			
		Если Не ПроверкаПодключенияВыполнена
			И Не ПустаяСтрока(СтатусЗавершения.Результат.СообщениеОбОшибке) Тогда
			СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; 
		КонецЕсли;
			
		Если ПроверкаПодключенияВыполнена
			И СтатусЗавершения.Результат.ПараметрыКорреспондентаПолучены Тогда
			ЗаполнитьПараметрыКорреспондента(СтатусЗавершения.Результат.ПараметрыКорреспондента);
		КонецЕсли;
		
		ЭтотУзелЕстьВКорреспонденте = СтатусЗавершения.Результат.ЭтотУзелЕстьВКорреспонденте; 		
		УзелКорреспондентаЕстьВЭтойБазе = СтатусЗавершения.Результат.УзелКорреспондентаЕстьВЭтойБазе;
		УзелДляУдаления = СтатусЗавершения.Результат.УзелДляУдаления;
				
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриНачалеПроверкиПодключенияВМоделиСервисаНаСервере(ПродолжитьОжидание)
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	
	Если МодульПомощникНастройки = Неопределено Тогда
		ПродолжитьОжидание = Ложь;
		Возврат;
	КонецЕсли;
	
	НастройкиПодключения = Новый Структура;
	НастройкиПодключения.Вставить("ИмяПланаОбмена",              ИмяПланаОбмена);
	НастройкиПодключения.Вставить("НаименованиеКорреспондента",  НаименованиеКорреспондента);
	НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента);
	
	ПараметрыОбработчикаПроверкиПодключения = Неопределено;
	МодульПомощникНастройки.ПриНачалеПолученияОбщихДанныхУзловКорреспондента(НастройкиПодключения,
		ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриОжиданииПроверкиПодключенияВМоделиСервисаНаСервере(ПараметрыОбработчика, ПродолжитьОжидание)

	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	
	Если МодульПомощникНастройки = Неопределено Тогда
		ПродолжитьОжидание = Ложь;
		Возврат;
	КонецЕсли;
	
	ПродолжитьОжидание = Ложь;
	МодульПомощникНастройки.ПриОжиданииПолученияОбщихДанныхУзловКорреспондента(ПараметрыОбработчика, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервере
Процедура ПриЗавершенииПроверкиПодключенияВМоделиСервисаНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке = "")
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	
	Если МодульПомощникНастройки = Неопределено Тогда
		ПроверкаПодключенияВыполнена = Ложь;
		Возврат;
	КонецЕсли;
	
	СтатусЗавершения = Неопределено;
	МодульПомощникНастройки.ПриЗавершенииПолученияОбщихДанныхУзловКорреспондента(
		ПараметрыОбработчикаПроверкиПодключения, СтатусЗавершения);
	ПараметрыОбработчикаПроверкиПодключения = Неопределено;
		
	Если СтатусЗавершения.Отказ Тогда
		ПроверкаПодключенияВыполнена = Ложь;
		СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке;
		Возврат;
	Иначе
		ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПараметрыКорреспондентаПолучены;
		
		Если Не ПроверкаПодключенияВыполнена Тогда
			СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке;
			Возврат;
		КонецЕсли;
		
		Если ПроверкаПодключенияВыполнена Тогда
			ЗаполнитьПараметрыКорреспондента(СтатусЗавершения.Результат.ПараметрыКорреспондента, Истина);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СохранениеНастроекПодключения

&НаКлиенте
Процедура ПриНачалеСохраненияНастроекПодключения()
	
	ПродолжитьОжидание = Истина;
	ПриНачалеСохраненияНастроекПодключенияНаСервере(ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(
			ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения);
			
		ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения",
			ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПриЗавершенииСохраненияНастроекПодключения();
	КонецЕсли;
	
КонецПроцедуры
	
&НаКлиенте
Процедура ПриОжиданииСохраненияНастроекПодключения()
	
	ПродолжитьОжидание = Ложь;
	ПриОжиданииСохраненияНастроекПодключенияНаСервере(ЭтоОбменСПриложениемВСервисе,
		ПараметрыОбработчикаСохраненияНастроекПодключения, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения);
		
		ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения",
			ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения.ТекущийИнтервал, Истина);
	Иначе
		ПриЗавершенииСохраненияНастроекПодключения();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииСохраненияНастроекПодключения()
	
	НастройкиПодключенияСохранены = Ложь;
	АдресВХранилищеНастройкиПодключения = "";
	СообщениеОбОшибке = "";
	
	ПриЗавершенииСохраненияНастроекПодключенияНаСервере(НастройкиПодключенияСохранены,
		АдресВХранилищеНастройкиПодключения, СообщениеОбОшибке);
		
	Результат = Новый Структура;
	Результат.Вставить("Отказ",             Не НастройкиПодключенияСохранены);
	Результат.Вставить("СообщениеОбОшибке", СообщениеОбОшибке);
	
	ОповещениеЗавершения = Новый ОписаниеОповещения("СохранениеНастроекПодключенияЗавершение", ЭтотОбъект);
	
	Если НастройкиПодключенияСохранены Тогда
		Если СохранитьПараметрыПодключенияВФайл
			И ЗначениеЗаполнено(АдресВХранилищеНастройкиПодключения) Тогда
			
			ДополнительныеПараметры = Новый Структура;
			ДополнительныеПараметры.Вставить("ОповещениеЗавершения", ОповещениеЗавершения);
			
			ОповещениеПолученияФайла = Новый ОписаниеОповещения("ПолучениеФайлаНастроекПодключенияЗавершение",
				ЭтотОбъект, ДополнительныеПараметры);
				
			ПолучаемыеФайлы = Новый Массив;
			ПолучаемыеФайлы.Добавить(
				Новый ОписаниеПередаваемогоФайла(ИмяФайлаНастроекПодключенияДляВыгрузки, АдресВХранилищеНастройкиПодключения));
				
			ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов();
			ПараметрыСохранения.Интерактивно = Ложь;
			
			ФайловаяСистемаКлиент.СохранитьФайлы(ОповещениеПолученияФайла, ПолучаемыеФайлы, ПараметрыСохранения);
			
		Иначе
			
			ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Результат);
			
		КонецЕсли;
	Иначе
		
		ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Результат);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПолучениеФайлаНастроекПодключенияЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
	
	Результат = Новый Структура;
	Результат.Вставить("Отказ",             Ложь);
	Результат.Вставить("СообщениеОбОшибке", "");
	
	Если ПолученныеФайлы = Неопределено Тогда
		Результат.Отказ = Истина;
		Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось сохранить настройки подключения в файл.'");
	КонецЕсли;
	
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеЗавершения, Результат);
	
КонецПроцедуры

&НаКлиенте
Процедура СохранениеНастроекПодключенияЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Не Результат.Отказ Тогда
		
		ИзменитьПорядковыйНомерПерехода(+1);
		
		Оповестить("Запись_УзелПланаОбмена");
		
	Иначе
		
		ИзменитьПорядковыйНомерПерехода(-1);
		
		ТекстСообщения = Результат.СообщениеОбОшибке;
		Если ПустаяСтрока(ТекстСообщения) Тогда
			ТекстСообщения = НСтр("ru = 'Не удалось сохранить настройки подключения.'");
		КонецЕсли;
		
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
			
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриНачалеСохраненияНастроекПодключенияНаСервере(ПродолжитьОжидание)
	
	Если ЭтоОбменСПриложениемВСервисе Тогда
		
		МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
		
		НастройкиПодключения = МодульПомощникНастройки.ОписаниеНастроекПодключения(НастройкаXDTO);
		
		НастройкиПодключения.ИмяПланаОбмена               = ИмяПланаОбменаКорреспондента;
		НастройкиПодключения.ИмяПланаОбменаКорреспондента = ИмяПланаОбмена;
		
		НастройкиПодключения.ИдентификаторНастройки = ИдентификаторНастройки;
		
		НастройкиПодключения.ФорматОбмена = ФорматОбмена;
		
		НастройкиПодключения.Наименование               = Наименование;
		НастройкиПодключения.НаименованиеКорреспондента = НаименованиеКорреспондента;
		
		НастройкиПодключения.Префикс               = Префикс;
		НастройкиПодключения.ПрефиксКорреспондента = ПрефиксКорреспондента;
		
		НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника = ИдентификаторИнформационнойБазыИсточника;
		НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника = ИдентификаторИнформационнойБазыПриемника;
		
		НастройкиПодключения.КонечнаяТочкаКорреспондента = КонечнаяТочкаКорреспондента;

		НастройкиПодключения.ОбластьДанныхКорреспондента = ОбластьДанныхКорреспондента;
		
		Если НастройкаXDTO Тогда
			НастройкиПодключения.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии.Добавить(ВерсияФорматаОбмена);
			НастройкиПодключения.НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты = ПоддерживаемыеОбъектыФорматаКорреспондента;
		КонецЕсли;
		
	Иначе
		
		// Настройки подключения в формате структуры реквизитов помощника создания обмена данными.
		НастройкиПодключения = Новый Структура;
		ЗаполнитьСтруктуруПараметровПодключенияПомощника(НастройкиПодключения);
		
		МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
			
	КонецЕсли;
	
	Если МодульПомощникНастройки = Неопределено Тогда
		ПродолжитьОжидание = Ложь;
		Возврат;
	КонецЕсли;
	
	ПараметрыОбработчикаСохраненияНастроекПодключения = Неопределено;
	МодульПомощникНастройки.ПриНачалеСохраненияНастроекПодключения(НастройкиПодключения,
		ПараметрыОбработчикаСохраненияНастроекПодключения, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриОжиданииСохраненияНастроекПодключенияНаСервере(ЭтоОбменСПриложениемВСервисе, ПараметрыОбработчика, ПродолжитьОжидание)
	
	Если ЭтоОбменСПриложениемВСервисе Тогда
		МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	Иначе
		МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	КонецЕсли;
	
	Если МодульПомощникНастройки = Неопределено Тогда
		ПродолжитьОжидание = Ложь;
		Возврат;
	КонецЕсли;
	
	ПродолжитьОжидание = Ложь;
	МодульПомощникНастройки.ПриОжиданииСохраненияНастроекПодключения(ПараметрыОбработчика, ПродолжитьОжидание);
	
КонецПроцедуры

&НаСервере
Процедура ПриЗавершенииСохраненияНастроекПодключенияНаСервере(НастройкиПодключенияСохранены,
		АдресВХранилищеНастройкиПодключения, СообщениеОбОшибке)
	
	СтатусЗавершения = Неопределено;
	
	Если ЭтоОбменСПриложениемВСервисе Тогда
		МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете();
	Иначе
		МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	КонецЕсли;
	
	Если МодульПомощникНастройки = Неопределено Тогда
		НастройкиПодключенияСохранены = Ложь;
		Возврат;
	КонецЕсли;
	
	МодульПомощникНастройки.ПриЗавершенииСохраненияНастроекПодключения(
		ПараметрыОбработчикаСохраненияНастроекПодключения, СтатусЗавершения);
	ПараметрыОбработчикаСохраненияНастроекПодключения = Неопределено;
		
	Если СтатусЗавершения.Отказ Тогда
		НастройкиПодключенияСохранены = Ложь;
		СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке;
		Возврат;
	Иначе
		НастройкиПодключенияСохранены = СтатусЗавершения.Результат.НастройкиПодключенияСохранены;
		
		Если Не НастройкиПодключенияСохранены Тогда
			СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке;
			Возврат;
		КонецЕсли;
		
		УзелОбмена = СтатусЗавершения.Результат.УзелОбмена;
		
		Если СохранитьПараметрыПодключенияВФайл Тогда
			ВременныйФайл = ПолучитьИмяВременногоФайла("xml");
			
			Запись = Новый ЗаписьТекста;
			Запись.Открыть(ВременныйФайл, "UTF-8");
			Запись.Записать(СтатусЗавершения.Результат.СтрокаНастроекПодключенияXML);
			Запись.Закрыть();
			
			АдресВХранилищеНастройкиПодключения = ПоместитьВоВременноеХранилище(
				Новый ДвоичныеДанные(ВременныйФайл), УникальныйИдентификатор);
				
			УдалитьФайлы(ВременныйФайл);
		КонецЕсли;
		
		Если Не МодельСервиса Тогда
			ЕстьДанныеДляСопоставления = СтатусЗавершения.Результат.ЕстьДанныеДляСопоставления;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	// Тусклый цвет шрифта недоступной для настройки синхронизации.
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПриложенияВСервисе.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПриложенияВСервисе.НастройкаСинхронизацииНедоступна");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
		
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСтруктуруПараметровПодключенияПомощника(СтруктураНастроекПомощника, БезКорреспондента = Ложь)
	
	// Преобразование структуры реквизитов формы в структуру реквизитов помощника.
	СтруктураНастроекПомощника.Вставить("ИмяПланаОбмена",               ИмяПланаОбмена);
	СтруктураНастроекПомощника.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбменаКорреспондента);
	СтруктураНастроекПомощника.Вставить("ВариантНастройкиОбмена", ИдентификаторНастройки);
	СтруктураНастроекПомощника.Вставить("ФорматОбмена", ФорматОбмена);
	
	Если ЗначениеЗаполнено(УзелОбмена)
		И Не БезКорреспондента Тогда
		СтруктураНастроекПомощника.Вставить("Корреспондент", УзелОбмена);
	КонецЕсли;
	
	Если ПродолжениеНастройкиВПодчиненномУзлеРИБ
		Или ЗагрузитьПараметрыПодключенияИзФайла Тогда
		СтруктураНастроекПомощника.Вставить("ВариантРаботыМастера", "ПродолжитьНастройкуОбменаДанными");
	Иначе
		СтруктураНастроекПомощника.Вставить("ВариантРаботыМастера", "НастроитьНовыйОбменДанными");
	КонецЕсли;
	
	СтруктураНастроекПомощника.Вставить("СсылкаНового", Неопределено);
	
	СтруктураНастроекПомощника.Вставить("КодПредопределенногоУзла", ИдентификаторИнформационнойБазыИсточника);
		
	СтруктураНастроекПомощника.Вставить("КодНовогоУзлаВторойБазы", ИдентификаторИнформационнойБазыПриемника);
	СтруктураНастроекПомощника.Вставить("КодУзлаКорреспондента",   ИдентификаторИнформационнойБазыПриемника);
	
	СтруктураНастроекПомощника.Вставить("НаименованиеЭтойБазы",   Наименование);
	СтруктураНастроекПомощника.Вставить("НаименованиеВторойБазы", НаименованиеКорреспондента);
	
	СтруктураНастроекПомощника.Вставить("ПрефиксИнформационнойБазыИсточника", Префикс);
	СтруктураНастроекПомощника.Вставить("ПрефиксИнформационнойБазыПриемника", ПрефиксКорреспондента);
	
	СтруктураНастроекПомощника.Вставить("УзелИнформационнойБазы", УзелОбмена);
	
	СтруктураНастроекПомощника.Вставить("ИспользоватьПрефиксыДляНастройкиОбмена",               ИспользоватьПрефиксыДляНастройкиОбмена);
	СтруктураНастроекПомощника.Вставить("ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента", ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента);
	
	СтруктураНастроекПомощника.Вставить("ИдентификаторИнформационнойБазыИсточника", ИдентификаторИнформационнойБазыИсточника);
	СтруктураНастроекПомощника.Вставить("ИдентификаторИнформационнойБазыПриемника", ИдентификаторИнформационнойБазыПриемника);
	
	СтруктураНастроекПомощника.Вставить("ВерсияФорматаФайлаНастроекОбменаДанными",
		ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными().ВерсияФорматаНастроекОбменаДанными());
		
	СтруктураНастроекПомощника.Вставить("ВерсияФорматаОбмена", ВерсияФорматаОбмена);
	СтруктураНастроекПомощника.Вставить("ПоддерживаемыеОбъектыФормата", ПоддерживаемыеОбъектыФорматаКорреспондента);
	
	// Настройки транспорта.	
	СтруктураНастроекПомощника.Вставить("COMАутентификацияОперационнойСистемы",
		ВнешнееСоединениеВидАутентификации = 0); // Операционная система
	СтруктураНастроекПомощника.Вставить("COMВариантРаботыИнформационнойБазы",
		?(ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый", 0, 1));
	СтруктураНастроекПомощника.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия",
		ВнешнееСоединениеИмяИнформационнойБазы);
	СтруктураНастроекПомощника.Вставить("COMИмяПользователя",
		ВнешнееСоединениеИмяПользователя);
	СтруктураНастроекПомощника.Вставить("COMИмяСервера1СПредприятия",
		ВнешнееСоединениеКластерСерверов);
	СтруктураНастроекПомощника.Вставить("COMКаталогИнформационнойБазы",
		ВнешнееСоединениеКаталогИнформационнойБазы);
	СтруктураНастроекПомощника.Вставить("COMПарольПользователя",
		ВнешнееСоединениеПароль);
		
	СтруктураНастроекПомощника.Вставить("EMAILМаксимальныйДопустимыйРазмерСообщения",
		ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения);
	СтруктураНастроекПомощника.Вставить("EMAILСжиматьФайлИсходящегоСообщения",
		ОбычныеКаналыСвязиАрхивироватьФайлы);
	СтруктураНастроекПомощника.Вставить("EMAILУчетнаяЗапись",
		ОбычныеКаналыСвязиEMAILУчетнаяЗапись);
	СтруктураНастроекПомощника.Вставить("EMAILТранслитерироватьИменаФайловСообщенийОбмена",
		ОбычныеКаналыСвязиТранслитерироватьИменаФайлов);
	
	СтруктураНастроекПомощника.Вставить("FILEКаталогОбменаИнформацией",
		ОбычныеКаналыСвязиFILEКаталог);
	СтруктураНастроекПомощника.Вставить("FILEСжиматьФайлИсходящегоСообщения",
		ОбычныеКаналыСвязиАрхивироватьФайлы);
	СтруктураНастроекПомощника.Вставить("FILEТранслитерироватьИменаФайловСообщенийОбмена",
		ОбычныеКаналыСвязиТранслитерироватьИменаФайлов);
	
	СтруктураНастроекПомощника.Вставить("FTPСжиматьФайлИсходящегоСообщения",
		ОбычныеКаналыСвязиАрхивироватьФайлы);
	СтруктураНастроекПомощника.Вставить("FTPСоединениеМаксимальныйДопустимыйРазмерСообщения",
		ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла);
	СтруктураНастроекПомощника.Вставить("FTPСоединениеПароль",
		ОбычныеКаналыСвязиFTPПароль);
	СтруктураНастроекПомощника.Вставить("FTPСоединениеПассивноеСоединение",
		ОбычныеКаналыСвязиFTPПассивныйРежим);
	СтруктураНастроекПомощника.Вставить("FTPСоединениеПользователь",
		ОбычныеКаналыСвязиFTPПользователь);
	СтруктураНастроекПомощника.Вставить("FTPСоединениеПорт",
		ОбычныеКаналыСвязиFTPПорт);
	СтруктураНастроекПомощника.Вставить("FTPСоединениеПуть",
		ОбычныеКаналыСвязиFTPПуть);
	СтруктураНастроекПомощника.Вставить("FTPТранслитерироватьИменаФайловСообщенийОбмена",
		ОбычныеКаналыСвязиТранслитерироватьИменаФайлов);
		
	СтруктураНастроекПомощника.Вставить("WSURLВебСервиса", ИнтернетВебАдрес);
	СтруктураНастроекПомощника.Вставить("WSЗапомнитьПароль", ИнтернетЗапомнитьПароль);
	СтруктураНастроекПомощника.Вставить("WSИмяПользователя", ИнтернетИмяПользователя);
	СтруктураНастроекПомощника.Вставить("WSПароль", ИнтернетПароль);
	
	Если ВидПодключения = "Интернет" Тогда
		СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.WS);
	ИначеЕсли ВидПодключения = "ВнешнееСоединение" Тогда
		СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.COM);
	ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда
		Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда
			Если ОбычныеКаналыСвязиFILEИспользование Тогда
				СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
			ИначеЕсли ОбычныеКаналыСвязиFTPИспользование Тогда
				СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FTP);
			ИначеЕсли ОбычныеКаналыСвязиEMAILИспользование Тогда
				СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL);
			КонецЕсли;
		ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE" Тогда
			СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
		ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP" Тогда
			СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FTP);
		ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL" Тогда
			СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL);
		КонецЕсли;
	ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда
		СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим);
	КонецЕсли;
	
	СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаCOM",   ВидПодключения = "ВнешнееСоединение");
	
	СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаEMAIL", ОбычныеКаналыСвязиEMAILИспользование);
	СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаFILE",  ОбычныеКаналыСвязиFILEИспользование);
	СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаFTP",   ОбычныеКаналыСвязиFTPИспользование);
	
	СтруктураНастроекПомощника.Вставить("ПарольАрхиваСообщенияОбмена", ОбычныеКаналыСвязиПарольАрхива);
	
	СтруктураНастроекПомощника.Вставить("ИсправитьДублированиеНастроекСинхронизации",	ИсправитьДублированиеНастроекСинхронизации);
	СтруктураНастроекПомощника.Вставить("УзелКорреспондентаЕстьВЭтойБазе",				УзелКорреспондентаЕстьВЭтойБазе);
	СтруктураНастроекПомощника.Вставить("ЭтотУзелЕстьВКорреспонденте",					ЭтотУзелЕстьВКорреспонденте);
	
	Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" Тогда
		
		СтруктураНастроекПомощника.Вставить("WSКонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента);
		СтруктураНастроекПомощника.Вставить("WSОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента);
		СтруктураНастроекПомощника.Вставить("WSКонечнаяТочка", КонечнаяТочка);
		СтруктураНастроекПомощника.Вставить("WSОбластьДанных", ПараметрыСеанса["ОбластьДанныхЗначение"]);
							
	Иначе
		
		СтруктураНастроекПомощника.Вставить("WSКонечнаяТочкаКорреспондента", Неопределено);
		СтруктураНастроекПомощника.Вставить("WSОбластьДанныхКорреспондента", 0);
		СтруктураНастроекПомощника.Вставить("WSКонечнаяТочка", Неопределено);
		СтруктураНастроекПомощника.Вставить("WSОбластьДанных", 0);
		
	КонецЕсли;

	СтруктураНастроекПомощника.Вставить("ВосстановлениеНастроекОбмена", ВосстановлениеНастроекОбмена);
	СтруктураНастроекПомощника.Вставить("НомерОтправленного", НомерОтправленного);
	СтруктураНастроекПомощника.Вставить("НомерПринятого", НомерПринятого);
	
КонецПроцедуры

&НаСервере
Процедура ПрочитатьСтруктуруПараметровПодключенияПомощника(СтруктураНастроекПомощника)
	
	// Преобразование структуры реквизитов помощника в структуру реквизитов формы.
	ИдентификаторИнформационнойБазыИсточника = СтруктураНастроекПомощника.КодПредопределенногоУзла;
	ИдентификаторИнформационнойБазыПриемника = СтруктураНастроекПомощника.КодНовогоУзлаВторойБазы;
	
	ИмяПланаОбменаКорреспондента = СтруктураНастроекПомощника.ИмяПланаОбменаКорреспондента;
	
	ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента =
		Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена)
			Или СтрДлина(ИдентификаторИнформационнойБазыПриемника) <> 36
			Или СтрДлина(ИдентификаторИнформационнойБазыИсточника) <> 36;
	
	Если ДоступноИзменениеНаименования Тогда
		Наименование = СтруктураНастроекПомощника.НаименованиеЭтойБазы;
	КонецЕсли;
	
	Если ДоступноИзменениеНаименованияКорреспондента Тогда
		НаименованиеКорреспондента = СтруктураНастроекПомощника.НаименованиеВторойБазы;
	КонецЕсли;
	
	Если ДоступноИзменениеПрефикса Тогда
		Префикс = СтруктураНастроекПомощника.ПрефиксИнформационнойБазыИсточника;
		Если ПустаяСтрока(Префикс)
			И (ИспользоватьПрефиксыДляНастройкиОбмена Или ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда
			Префикс = СтруктураНастроекПомощника.КодПредопределенногоУзла;
		КонецЕсли;
	КонецЕсли;
	
	Если ДоступноИзменениеПрефиксаКорреспондента Тогда
		ПрефиксКорреспондента = СтруктураНастроекПомощника.ПрефиксИнформационнойБазыПриемника;
		Если ПустаяСтрока(ПрефиксКорреспондента)
			И (ИспользоватьПрефиксыДляНастройкиОбмена Или ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда
			ПрефиксКорреспондента = СтруктураНастроекПомощника.КодНовогоУзлаВторойБазы;
		КонецЕсли;
	КонецЕсли;
	
	// Настройки транспорта.
	ВнешнееСоединениеВидАутентификации =
		?(СтруктураНастроекПомощника.COMАутентификацияОперационнойСистемы, 0, 1); // 0 - Операционная система, 1 - 1с Предприятие
	ВнешнееСоединениеВариантРаботыИнформационнойБазы =
		?(СтруктураНастроекПомощника.COMВариантРаботыИнформационнойБазы = 0, "Файловый", "КлиентСерверный");
	ВнешнееСоединениеИмяИнформационнойБазы =
		СтруктураНастроекПомощника.COMИмяИнформационнойБазыНаСервере1СПредприятия;
	ВнешнееСоединениеИмяПользователя =
		СтруктураНастроекПомощника.COMИмяПользователя;
	ВнешнееСоединениеКластерСерверов =
		СтруктураНастроекПомощника.COMИмяСервера1СПредприятия;
	ВнешнееСоединениеКаталогИнформационнойБазы =
		СтруктураНастроекПомощника.COMКаталогИнформационнойБазы;
	ВнешнееСоединениеПароль =
		СтруктураНастроекПомощника.COMПарольПользователя;
	
	ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения =
		СтруктураНастроекПомощника.EMAILМаксимальныйДопустимыйРазмерСообщения;
	ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения = 
		ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения);
	ОбычныеКаналыСвязиEMAILУчетнаяЗапись =
		СтруктураНастроекПомощника.EMAILУчетнаяЗапись;
	
	ОбычныеКаналыСвязиFILEКаталог =
		СтруктураНастроекПомощника.FILEКаталогОбменаИнформацией;
	
	ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла =
		СтруктураНастроекПомощника.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения;
	ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла =
		ЗначениеЗаполнено(ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла);
	ОбычныеКаналыСвязиFTPПароль =
		СтруктураНастроекПомощника.FTPСоединениеПароль;
	ОбычныеКаналыСвязиFTPПассивныйРежим =
		СтруктураНастроекПомощника.FTPСоединениеПассивноеСоединение;
	ОбычныеКаналыСвязиFTPПользователь =
		СтруктураНастроекПомощника.FTPСоединениеПользователь;
	ОбычныеКаналыСвязиFTPПорт =
		СтруктураНастроекПомощника.FTPСоединениеПорт;
	ОбычныеКаналыСвязиFTPПуть =
		СтруктураНастроекПомощника.FTPСоединениеПуть;
		
	ИнтернетВебАдрес        = СтруктураНастроекПомощника.WSURLВебСервиса;
	ИнтернетЗапомнитьПароль = СтруктураНастроекПомощника.WSЗапомнитьПароль;
	ИнтернетИмяПользователя = СтруктураНастроекПомощника.WSИмяПользователя;
	ИнтернетПароль          = СтруктураНастроекПомощника.WSПароль;
	
	Если СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда
		ВидПодключения = "Интернет";
	ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда
		ВидПодключения = "ВнешнееСоединение";
	ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE
		Или СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP
		Или СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда
		ВидПодключения = "ОбычныеКаналыСвязи";
	ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда
		ВидПодключения = "ПассивныйРежим";
	КонецЕсли;
	
	ОбычныеКаналыСвязиEMAILИспользование = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаEMAIL;
	ОбычныеКаналыСвязиFILEИспользование  = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаFILE;
	ОбычныеКаналыСвязиFTPИспользование   = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаFTP;
	
	Если ОбычныеКаналыСвязиFILEИспользование Тогда
		ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE";
	ИначеЕсли ОбычныеКаналыСвязиFTPИспользование Тогда
		ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP";
	ИначеЕсли ОбычныеКаналыСвязиEMAILИспользование Тогда
		ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL";
	КонецЕсли;
	
	ОбычныеКаналыСвязиТранслитерироватьИменаФайлов =
		СтруктураНастроекПомощника.FILEТранслитерироватьИменаФайловСообщенийОбмена
		Или СтруктураНастроекПомощника.FTPТранслитерироватьИменаФайловСообщенийОбмена
		Или СтруктураНастроекПомощника.EMAILТранслитерироватьИменаФайловСообщенийОбмена;
		
	ОбычныеКаналыСвязиАрхивироватьФайлы =
		СтруктураНастроекПомощника.FILEСжиматьФайлИсходящегоСообщения
		Или СтруктураНастроекПомощника.FTPСжиматьФайлИсходящегоСообщения
		Или СтруктураНастроекПомощника.EMAILСжиматьФайлИсходящегоСообщения;	
	
	ОбычныеКаналыСвязиПарольАрхива = СтруктураНастроекПомощника.ПарольАрхиваСообщенияОбмена;
	
	ОбычныеКаналыСвязиИспользоватьПарольДляАрхива = ЗначениеЗаполнено(ОбычныеКаналыСвязиПарольАрхива);
	
	Если СтрДлина(ИдентификаторИнформационнойБазыИсточника) = 36
		И СтрДлина(ИдентификаторИнформационнойБазыПриемника) = 36 Тогда
		
		ИмяПланаОбмена = ОбменДаннымиСервер.НайтиИмяПланаОбменаЧерезУниверсальныйФормат(ИмяПланаОбменаКорреспондента);
		
		Если ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код <> ИдентификаторИнформационнойБазыИсточника
			И ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена).Количество() > 0 Тогда
			ВосстановлениеНастроекОбмена = "ВосстановлениеСПредупреждением";
		Иначе
			ВосстановлениеНастроекОбмена = "Восстановление";
		КонецЕсли;
		
	КонецЕсли;
	
	НомерОтправленного = СтруктураНастроекПомощника.НомерОтправленного;
	НомерПринятого = СтруктураНастроекПомощника.НомерПринятого
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПараметрыКорреспондента(ПараметрыКорреспондента, КорреспондентВМоделиСервиса = Ложь)
	
	Если ЗначениеЗаполнено(ПараметрыКорреспондента.ПрефиксИнформационнойБазы) Тогда
		ПрефиксКорреспондента = ПараметрыКорреспондента.ПрефиксИнформационнойБазы;
		ДоступноИзменениеПрефиксаКорреспондента = Ложь;
	Иначе
		ПрефиксКорреспондента = ПараметрыКорреспондента.ПрефиксИнформационнойБазыПоУмолчанию;
		ДоступноИзменениеПрефиксаКорреспондента = Истина;
	КонецЕсли;
	
	Если Не КорреспондентВМоделиСервиса Тогда
		Если ЗначениеЗаполнено(ПараметрыКорреспондента.НаименованиеИнформационнойБазы) Тогда
			НаименованиеКорреспондента = ПараметрыКорреспондента.НаименованиеИнформационнойБазы;
		Иначе
			НаименованиеКорреспондента = ПараметрыКорреспондента.НаименованиеИнформационнойБазыПоУмолчанию;
		КонецЕсли;
	КонецЕсли;
	
	ИдентификаторИнформационнойБазыПриемника = ПараметрыКорреспондента.КодЭтогоУзла;
	
	ВерсияКонфигурацииКорреспондента = ПараметрыКорреспондента.ВерсияКонфигурации;
	
	ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена;
	
	Если НастройкаXDTO Тогда
		ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = ПараметрыКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена;
		
		ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата(
			ИмяПланаОбмена, ПараметрыКорреспондента.ВерсииФорматаОбмена);
		
		ПоддерживаемыеОбъектыФорматаКорреспондента = Новый ХранилищеЗначения(
			ПараметрыКорреспондента.ПоддерживаемыеОбъектыФормата, Новый СжатиеДанных(9));
	ИначеЕсли ВидПодключения = "Интернет"
		И СтрДлина(ИдентификаторИнформационнойБазыПриемника) = 9 Тогда
		ИспользоватьПрефиксыДляНастройкиОбмена               = Ложь;
		ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = Ложь;
		
		Если ПустаяСтрока(ИдентификаторИнформационнойБазыИсточника) Тогда
			ИдентификаторИнформационнойБазыИсточника = Префикс;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНастройкиПодключенияИзXMLНаСервере(АдресВХранилище, Отказ, СообщениеОбОшибке = "")
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	
	ВременныйФайл = ПолучитьИмяВременногоФайла("xml");
		
	ДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилище); // ДвоичныеДанные
	ДанныеФайла.Записать(ВременныйФайл);
	
	Попытка
		НастройкиПодключения = МодульПомощникНастройки.Создать();
		НастройкиПодключения.ИмяПланаОбмена = ИмяПланаОбмена;
		НастройкиПодключения.ВариантНастройкиОбмена = ИдентификаторНастройки;
		НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными";
		
		МодульПомощникНастройки.ЗаполнитьНастройкиПодключенияИзXML(
			НастройкиПодключения, ВременныйФайл, Истина);
	Исключение
		Отказ = Истина;
		СообщениеОбОшибке   = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		СообщениеОбОшибкеЖР = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
		ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(),
			УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибкеЖР);
	КонецПопытки;
		
	УдалитьФайлы(ВременныйФайл);
	УдалитьИзВременногоХранилища(АдресВХранилище);
	
	Если Не Отказ Тогда
		ПрочитатьСтруктуруПараметровПодключенияПомощника(НастройкиПодключения);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНастройкиXDTOКорреспондентаИзXMLНаСервере(АдресВХранилище, Отказ, СообщениеОбОшибке = "")
	
	МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	
	ВременныйФайл = ПолучитьИмяВременногоФайла("xml");
		
	ДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилище); // ДвоичныеДанные
	ДанныеФайла.Записать(ВременныйФайл);
	
	Попытка
		НастройкиXDTOКорреспондента = МодульПомощникНастройки.НастройкиXDTOКорреспондентаИзXML(
			ВременныйФайл, Истина, ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка());
	Исключение
		Отказ = Истина;
		СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
		ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(),
			УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке);
	КонецПопытки;

	УдалитьФайлы(ВременныйФайл);
	УдалитьИзВременногоХранилища(АдресВХранилище);
	
	Если Не Отказ Тогда
		ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата(ИмяПланаОбмена,
			НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии);
			
		ПоддерживаемыеОбъектыФорматаКорреспондента = Новый ХранилищеЗначения(НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты,
			Новый СжатиеДанных(9));
			
		ИдентификаторИнформационнойБазыПриемника = НастройкиXDTOКорреспондента.ИдентификаторОтправителя;
		
		ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = (СтрДлина(ИдентификаторИнформационнойБазыПриемника) <> 36);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДоступныеВидыТранспорта()
	
	ДоступныеВидыТранспорта = Новый Структура;
	
	ИспользуемыеТранспортыСообщенийОбмена = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(
		ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка(), ИдентификаторНастройки);
		
	Для Каждого ТекущийВидТранспорта Из ИспользуемыеТранспортыСообщенийОбмена Цикл
		// В модели сервиса обмен через Интернет и Интернет-пассивное соединение
		// поддерживается только для планов обмена XDTO.	
		Если МодельСервиса Тогда
			Если ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WS
				И ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда
				Продолжить;
			КонецЕсли;
			
			Если Не НастройкаXDTO Тогда
				Продолжить;
			КонецЕсли;
		КонецЕсли;
			
		ДоступныеВидыТранспорта.Вставить(ОбщегоНазначения.ИмяЗначенияПеречисления(ТекущийВидТранспорта));
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииПомещенияФайлаНастроекПодключенияДляЗагрузки(ПомещенныйФайл, ДополнительныеПараметры) Экспорт
	
	Результат = Новый Структура;
	Результат.Вставить("Отказ", Ложь);
	Результат.Вставить("СообщениеОбОшибке", "");
	
	Если ПомещенныйФайл = Неопределено Тогда
		Результат.Отказ = Истина;
	Иначе
		ЗаполнитьНастройкиПодключенияИзXMLНаСервере(ПомещенныйФайл.Хранение, Результат.Отказ, Результат.СообщениеОбОшибке);
	КонецЕсли;
	
	Если Результат.Отказ Тогда
		Если ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда
			Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить файл с настройками подключения.'");
		КонецЕсли;
	Иначе
		ДоступноИзменениеНаименования = Ложь;
		ДоступноИзменениеПрефикса     = Ложь;
		
		ДоступноИзменениеНаименованияКорреспондента = Ложь;
		ДоступноИзменениеПрефиксаКорреспондента     = Ложь;
	КонецЕсли;
	
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииПомещенияФайлаНастроекXDTOКорреспондента(ПомещенныйФайл, ДополнительныеПараметры) Экспорт

	Если ПомещенныйФайл = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Результат = Новый Структура;
	Результат.Вставить("Отказ",             Ложь);
	Результат.Вставить("СообщениеОбОшибке", "");
	
	ЗаполнитьНастройкиXDTOКорреспондентаИзXMLНаСервере(ПомещенныйФайл.Хранение, Результат.Отказ, Результат.СообщениеОбОшибке);
	
	Если Результат.Отказ Тогда
		Если ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда
			Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить файл с настройками корреспондента.'");
		КонецЕсли;
	КонецЕсли;
	
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат);
	
КонецПроцедуры

&НаКлиенте
Процедура ПродолжениеНастройкиПараметрыПодключенияОбычныеКаналыСвязи(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат.Отказ Тогда
		ИзменитьПорядковыйНомерПерехода(-1);
		ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке);
		Возврат;
	КонецЕсли;
	
	Элементы.ПараметрыДоступаВИнтернет.Видимость = ДоступнаНастройкаПараметровДоступаВИнтернет;
	
	Элементы.ГруппаСинхронизацияЧерезКаталог.Видимость = ДоступныеВидыТранспорта.Свойство("FILE");
	Элементы.ГруппаСинхронизацияЧерезFTP.Видимость = ДоступныеВидыТранспорта.Свойство("FTP");
	Элементы.ГруппаСинхронизацияЧерезEMAIL.Видимость = ДоступныеВидыТранспорта.Свойство("EMAIL");
	
	Если ОбычныеКаналыСвязиFILEИспользование Тогда
		Элементы.ГруппаСинхронизацияЧерезКаталог.Показать();
	Иначе
		Элементы.ГруппаСинхронизацияЧерезКаталог.Скрыть();
	КонецЕсли;
	
	Если ОбычныеКаналыСвязиFTPИспользование Тогда
		Элементы.ГруппаСинхронизацияЧерезFTP.Показать();
	Иначе
		Элементы.ГруппаСинхронизацияЧерезFTP.Скрыть();
	КонецЕсли;
	
	Если ОбычныеКаналыСвязиEMAILИспользование Тогда
		Элементы.ГруппаСинхронизацияЧерезEMAIL.Показать();
	Иначе
		Элементы.ГруппаСинхронизацияЧерезEMAIL.Скрыть();
	КонецЕсли;
	
	Если ДополнительныеПараметры.ЭтоПереходДалее Тогда
	
		ПриИзмененииОбычныеКаналыСвязиFILEИспользование();
		ПриИзмененииОбычныеКаналыСвязиFTPИспользование();
		ПриИзмененииОбычныеКаналыСвязиEMAILИспользование();
		
		ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы();
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПродолжениеНастройкиОбщиеНастройкиСинхронизации(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат.Отказ Тогда
		Если ВидПодключения = "ПассивныйРежим" Тогда 
			ИзменитьПорядковыйНомерПерехода(-3);
			Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияСпособыНастройкиПодключения;
		Иначе
			ИзменитьПорядковыйНомерПерехода(-1)	
		КонецЕсли;	
		ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке);
		Возврат;
	КонецЕсли;
	
	Если ДополнительныеПараметры.ЭтоПереходДалее Тогда
		Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Очистить();
		
		Если ОбычныеКаналыСвязиFILEИспользование Тогда
			Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("FILE");
			ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE";
		КонецЕсли;
		
		Если ОбычныеКаналыСвязиFTPИспользование Тогда
			Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("FTP");
			Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда
				ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP";
			КонецЕсли;
		КонецЕсли;
		
		Если ОбычныеКаналыСвязиEMAILИспользование Тогда
			Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("EMAIL");
			Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда
				ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL";
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ОбычныеКаналыСвязиВидТранспортаПоУмолчанию",
		"Видимость",
		Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Количество() > 1);
		
	СохранитьПараметрыПодключенияВФайл = ВидПодключения = "ОбычныеКаналыСвязи"
		И Не НастройкаРИБ 
		И Не ЗагрузитьПараметрыПодключенияИзФайла;
		
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ИмяФайлаНастроекПодключенияДляВыгрузки", "Видимость", СохранитьПараметрыПодключенияВФайл);
			
	Если СохранитьПараметрыПодключенияВФайл
		И (ВидПодключения = "ОбычныеКаналыСвязи") Тогда
		Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая()
			И ОбычныеКаналыСвязиFILEИспользование Тогда
			ИмяФайлаНастроекПодключенияДляВыгрузки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(
				ОбычныеКаналыСвязиFILEКаталог, ИмяФайлаНастроекДляПриемника + ".xml");
		КонецЕсли;
	КонецЕсли;
		
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаНастройкиПрограммыПредставление", "Видимость", Не (ВидПодключения = "ПассивныйРежим"));
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"Наименование", "ТолькоПросмотр", Не ДоступноИзменениеНаименования);
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"Префикс", "ТолькоПросмотр", Не ДоступноИзменениеПрефикса);
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"НаименованиеКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеНаименованияКорреспондента);
		
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ПрефиксКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеПрефиксаКорреспондента);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗарегистрироватьCOMСоединительЗавершение(Зарегистрировано, ДополнительныеПараметры) Экспорт
	
	ПриНачалеПроверкиПодключенияOnline();
	
КонецПроцедуры

#Область ИнициализацияФормыПриСоздании

&НаСервере
Процедура ПроверитьВозможностьИспользованияФормы(Отказ = Ложь)
	
	// Обязательная должны быть переданы параметры помощника создания обмена данными.
	Если Не Параметры.Свойство("ИмяПланаОбмена")
		Или Не Параметры.Свойство("ИдентификаторНастройки") Тогда
		ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного использования.'");
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ);
		Возврат;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьСвойстваФормы()
	
	Если НастройкаРИБ Тогда
		Заголовок = НСтр("ru = 'Настройка распределенной информационной базы'");
	Иначе
		Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Настройка подключения к ""%1""'"),
			НаименованиеКонфигурацииКорреспондента);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьРеквизитыФормы()
	
	ИмяПланаОбмена         = Параметры.ИмяПланаОбмена;
	ИдентификаторНастройки = Параметры.ИдентификаторНастройки;
	
	ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ");
	
	ВерсияКонфигурацииКорреспондента = "";
	
	МодельСервиса = ОбщегоНазначения.РазделениеВключено()
		И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных();
		
	ДоступнаНастройкаПараметровДоступаВИнтернет = Не МодельСервиса
		И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета");
		
	НастройкаРИБ  = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена);
	НастройкаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена);
	
	ЗаполнитьДоступныеВидыТранспорта();
	
	Если ДоступныеВидыТранспорта.Свойство("COM") Тогда
		ВидПодключения = "ВнешнееСоединение";
		
		ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый";
		ВнешнееСоединениеВидАутентификации = 1; // 1с Предприятие
	ИначеЕсли ДоступныеВидыТранспорта.Свойство("WS") Тогда
		ВидПодключения = "Интернет";
	ИначеЕсли ДоступныеВидыТранспорта.Свойство("FILE")
		Или ДоступныеВидыТранспорта.Свойство("FTP")
		Или ДоступныеВидыТранспорта.Свойство("EMAIL") Тогда
		ВидПодключения = "ОбычныеКаналыСвязи";
	ИначеЕсли ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим") Тогда
		ВидПодключения = "ПассивныйРежим";
	КонецЕсли;
	
	Если ДоступныеВидыТранспорта.Свойство("FILE") Тогда
		ОбычныеКаналыСвязиFILEИспользование  = Истина;
	ИначеЕсли ДоступныеВидыТранспорта.Свойство("FTP") Тогда
		ОбычныеКаналыСвязиFTPИспользование   = Истина;
	ИначеЕсли ДоступныеВидыТранспорта.Свойство("EMAIL") Тогда
		ОбычныеКаналыСвязиEMAILИспользование = Истина;
	КонецЕсли;
	
	Если ДоступныеВидыТранспорта.Свойство("FTP") Тогда
		ОбычныеКаналыСвязиFTPПорт = 21;
		ОбычныеКаналыСвязиFTPПассивныйРежим = Истина;
	КонецЕсли;
	
	// Проверка, поддерживает ли менеджер сервиса настройку через внутреннюю публикацию. Только для обмена через
	// универсальный формат.
	Если НастройкаXDTO 
		И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда 
		
		МодульОбменДаннымиВнутренняяПубликация = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВнутренняяПубликация");
		ДоступенExchangeAdministrationManage_3_0_1_1 =
			МодульОбменДаннымиВнутренняяПубликация.ВСервисеДоступенExchangeAdministrationManage_3_0_1_1();
		
	Иначе
		
		ДоступенExchangeAdministrationManage_3_0_1_1 = Ложь;
		
	КонецЕсли;
	
	Если ДоступенExchangeAdministrationManage_3_0_1_1
		И МодельСервиса 
		И (ДоступныеВидыТранспорта.Свойство("WS") Или ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим")) Тогда
		
		СпособНастройкиПодключенияВСервисе = "ИнтернетАвто";
		
	ИначеЕсли МодельСервиса Тогда
		
		СпособНастройкиПодключенияВСервисе = "МенеджерСервиса";
		ЭтоОбменСПриложениемВСервисе = Истина;
		
	Иначе
		
		СпособНастройкиПодключенияВСервисе = "";
		
	КонецЕсли;
	
	БольшеНастроекВидимость = ВидимостьКнопкиБольшеНастроек();
	
	ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена,
		"ИмяКонфигурацииКорреспондента,
		|ФорматОбмена,
		|ИмяФайлаНастроекДляПриемника,
		|НаименованиеКонфигурацииКорреспондента,
		|КраткаяИнформацияПоОбмену,
		|ПодробнаяИнформацияПоОбмену,
		|ИмяФормыПомощникаНастройкиСинхронизацииДанных",
		ИдентификаторНастройки);
	
	ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначенияНастроекДляВарианта);
	
	ИмяПланаОбменаКорреспондента = ИмяПланаОбмена;
	
	ДоступноИзменениеНаименования = Ложь;
	ДоступноИзменениеПрефикса     = Ложь;
	
	ДоступноИзменениеНаименованияКорреспондента = Истина;
	ДоступноИзменениеПрефиксаКорреспондента     = Истина;
	
	Если МодельСервиса Тогда
		МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса");
		Наименование = МодульОбменДаннымиВМоделиСервиса.СформироватьНаименованиеПредопределенногоУзла();
	Иначе
		// Представление этой информационной базы.
		Наименование = ОбменДаннымиСервер.НаименованиеПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена);
		Если ПустаяСтрока(Наименование) Тогда
			ДоступноИзменениеНаименования = Истина;
			Наименование = ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы();
		КонецЕсли;
		ДоступноИзменениеНаименования = Истина;
		
		НаименованиеКорреспондента = НаименованиеКонфигурацииКорреспондента;
	КонецЕсли;
	
	Префикс = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы");
	Если ПустаяСтрока(Префикс) Тогда
		ДоступноИзменениеПрефикса = Истина;
		ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Префикс);
	КонецЕсли;
	
	Если НастройкаРИБ Тогда
		ВидПодключения = "ОбычныеКаналыСвязи";
	КонецЕсли;
	
	Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда
		УзелОбмена = ОбменДаннымиСервер.ГлавныйУзел();
		
		// Заполнение параметров из настроек подключения в константе.
		МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
		
		ПомощникСозданияОбмена = МодульПомощникНастройки.Создать();
		ПомощникСозданияОбмена.ИмяПланаОбмена = ИмяПланаОбмена;
		ПомощникСозданияОбмена.ВариантНастройкиОбмена = ИдентификаторНастройки;
		ПомощникСозданияОбмена.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными";
		
		МодульПомощникНастройки.ЗаполнитьНастройкиПодключенияИзКонстанты(ПомощникСозданияОбмена);		
		ПрочитатьСтруктуруПараметровПодключенияПомощника(ПомощникСозданияОбмена);
		
		ДоступноИзменениеНаименования = Ложь;
		ДоступноИзменениеПрефикса     = Ложь;
		
		ДоступноИзменениеНаименованияКорреспондента = Ложь;
		ДоступноИзменениеПрефиксаКорреспондента     = Ложь;
	КонецЕсли;
	
	ИдентификаторИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена);
	
	Если НастройкаXDTO Тогда
		ИспользоватьПрефиксыДляНастройкиОбмена = Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(
			ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка());
		
		Если ПустаяСтрока(ИдентификаторИнформационнойБазыИсточника) Тогда
			ИдентификаторИнформационнойБазыИсточника = ?(ИспользоватьПрефиксыДляНастройкиОбмена,
				Префикс, Строка(Новый УникальныйИдентификатор));
		КонецЕсли;
	Иначе
		ИспользоватьПрефиксыДляНастройкиОбмена = Истина;
	КонецЕсли;
	
	// До получения настроек из корреспондента устанавливаем режим по-умолчанию.
	ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = Истина;
	
	ЗаполнитьТаблицуПереходов();
	
КонецПроцедуры

&НаСервере
Функция ВидимостьКнопкиБольшеНастроек()
	
	Возврат Ложь;
	
КонецФункции

#КонецОбласти

#Область СценарииРаботыПомощника

&НаСервере
Функция ДобавитьСтрокуТаблицыПереходов(ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ИмяСтраницыДекорации = "")
	
	СтрокаПереходов = ТаблицаПереходов.Добавить();
	СтрокаПереходов.ПорядковыйНомерПерехода = ТаблицаПереходов.Количество();
	СтрокаПереходов.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы;
	СтрокаПереходов.ИмяСтраницыНавигации = ИмяСтраницыНавигации;
	СтрокаПереходов.ИмяСтраницыДекорации = ИмяСтраницыДекорации;
	
	Возврат СтрокаПереходов;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьТаблицуПереходов()
	
	ТаблицаПереходов.Очистить();
	
	Если НастройкаРИБ Тогда
		НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияОбычныеКаналыСвязи", "СтраницаНавигацияНачало");
		НовыйПереход.ИмяОбработчикаПриОткрытии = 		"Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии";
		НовыйПереход.ИмяОбработчикаПриПереходеДалее = 	"Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее";
	Иначе
		НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаСпособНастройкиПодключения", "СтраницаНавигацияНачало");
		НовыйПереход.ИмяОбработчикаПриОткрытии 		= "Подключаемый_СтраницаСпособНастройкиПодключения_ПриОткрытии";
		НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаСпособНастройкиПодключения_ПриПереходеДалее";
		
		НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияИнтернет", "СтраницаНавигацияПродолжение");
		НовыйПереход.ИмяОбработчикаПриОткрытии 		= "Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриОткрытии";
		НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриПереходеДалее";
		
		Если Не МодельСервиса Тогда
			НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияВнешнееСоединение", "СтраницаНавигацияПродолжение");
			НовыйПереход.ИмяОбработчикаПриОткрытии 		= "Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриОткрытии";
			НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриПереходеДалее";
			
			НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияОбычныеКаналыСвязи", "СтраницаНавигацияПродолжение");
			НовыйПереход.ИмяОбработчикаПриОткрытии 		= "Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии";
			НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее";
		КонецЕсли;
	КонецЕсли;
	
	НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПроверкаПодключения", "СтраницаНавигацияПродолжение");
	НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаПроверкаПодключения_ПриОткрытии";
	НовыйПереход.ДлительнаяОперация = Истина;
	НовыйПереход.ИмяОбработчикаДлительнойОперации = "Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация";
	
	НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОбщиеНастройкиСинхронизации", "СтраницаНавигацияПродолжение");
	НовыйПереход.ИмяОбработчикаПриОткрытии 		= "Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриОткрытии";
	НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее";
	
	НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаСохранениеНастроекПодключения", "СтраницаНавигацияПродолжение");
	НовыйПереход.ДлительнаяОперация = Истина;
	НовыйПереход.ИмяОбработчикаДлительнойОперации = "Подключаемый_СтраницаСохранениеНастроекПодключения_ДлительнаяОперация";
	
	НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОкончание", "СтраницаНавигацияОкончание");
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиИзмененийРеквизитовФормы

&НаКлиенте
Процедура ПриИзмененииСпособНастройкиПодключения()
	
	Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" Тогда
				
		ЭтоОбменСПриложениемВСервисе = Ложь;
		ВидПодключения = "Интернет";
		  
	ИначеЕсли СпособНастройкиПодключенияВСервисе = "МенеджерСервиса" Тогда
			
		ЭтоОбменСПриложениемВСервисе = Истина;
		ВидПодключения = "";
				 		
	ИначеЕсли СпособНастройкиПодключенияВСервисе = "ИнтернетВручную" Тогда
		
		ЭтоОбменСПриложениемВСервисе = Ложь;
		ВидПодключения = "Интернет";
				
	КонецЕсли;
			
КонецПроцедуры

&НаКлиенте
Процедура ПриПереходеНаСтраницуВидыПодключения()
		
	Элементы.ВидПодключенияВнешнееСоединение.Видимость  = ДоступныеВидыТранспорта.Свойство("COM");
	Элементы.ВидПодключенияИнтернет.Видимость           = ДоступныеВидыТранспорта.Свойство("WS");
	Элементы.ВидПодключенияОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE")
		Или ДоступныеВидыТранспорта.Свойство("FTP")
		Или ДоступныеВидыТранспорта.Свойство("EMAIL");
	
	Элементы.ВидПодключенияПассивныйРежим.Видимость    = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим");
	
	Элементы.ГруппаФайлНастройкиПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим");
	Элементы.ГруппаФайлНастройкиОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE")
		Или ДоступныеВидыТранспорта.Свойство("FTP")
		Или ДоступныеВидыТранспорта.Свойство("EMAIL");
	
	Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаВидыПодключения;
	ПриИзмененииВидПодключения();
  
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ИмяФайлаНастроекПодключенияДляЗагрузки", "Доступность", ЗагрузитьПараметрыПодключенияИзФайла);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииВидПодключения()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаФайлНастройкиОбычныеКаналыСвязи", "Доступность", ВидПодключения = "ОбычныеКаналыСвязи");
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаФайлНастройкиПассивныйРежим", "Доступность", ВидПодключения = "ПассивныйРежим");
	
	Если ВидПодключения = "ОбычныеКаналыСвязи" Тогда
		ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбычныеКаналыСвязиFILEИспользование()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаОбычныеКаналыСвязиFILEИспользование", "Доступность", ОбычныеКаналыСвязиFILEИспользование);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбычныеКаналыСвязиFTPИспользование()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаОбычныеКаналыСвязиFTPИспользование", "Доступность", ОбычныеКаналыСвязиFTPИспользование);
	
	ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбычныеКаналыСвязиEMAILИспользование()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаОбычныеКаналыСвязиEMAILИспользование", "Доступность", ОбычныеКаналыСвязиEMAILИспользование);
	
	ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ВнешнееСоединениеКаталогИнформационнойБазы",
		"Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый");
		
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ВнешнееСоединениеКластерСерверов",
		"Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный");
		
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ВнешнееСоединениеИмяИнформационнойБазы",
		"Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный");
	
КонецПроцедуры
	
&НаКлиенте
Процедура ПриИзмененииВнешнееСоединениеВидАутентификации()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ВнешнееСоединениеИмяПользователя",
		"Доступность", ВнешнееСоединениеВидАутентификации = 1); // 1с Предприятие
		
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ВнешнееСоединениеПароль",
		"Доступность", ВнешнееСоединениеВидАутентификации = 1); // 1с Предприятие
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаОбычныеКаналыСвязиПарольАрхива", "Доступность", ОбычныеКаналыСвязиАрхивироватьФайлы);
	
	ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ОбычныеКаналыСвязиПарольАрхива", "Доступность", ОбычныеКаналыСвязиИспользоватьПарольДляАрхива);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла",
		"Доступность",
		ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения",
		"Доступность",
		ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийПереходов

&НаКлиенте
Функция Подключаемый_СтраницаСпособНастройкиПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)
	
	Элементы.БольшеНастроек.Видимость = БольшеНастроекВидимость;
			
	Если ЭтоПереходДалее Тогда
	
		Если МодельСервиса Тогда
			НачатьПолучениеСпискаПриложенийДляПодключения();
			ПриИзмененииСпособНастройкиПодключения()
		Иначе
			ПриПереходеНаСтраницуВидыПодключения();
		КонецЕсли;
		
	Иначе
		
		Если МодельСервиса Тогда
			ВыбратьНаилучшийСпособНастройкиПодключения();	
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаСпособНастройкиПодключения_ПриПереходеДалее(Отказ)
	
	Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" 
		Или СпособНастройкиПодключенияВСервисе = "МенеджерСервиса" Тогда
		
		ТекущиеДанные = Элементы.ПриложенияВСервисе.ТекущиеДанные;
		Если ТекущиеДанные = Неопределено Тогда
			
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Выберите приложение из списка для продолжения настройки подключения.'"),
				, "ПриложенияВСервисе", , Отказ);
			Возврат Неопределено;
			
		ИначеЕсли ТекущиеДанные.НастройкаСинхронизацииНедоступна Тогда
			
			ПоказатьПредупреждение(, ТекущиеДанные.СообщениеОбОшибке);
			Отказ = Истина;
			Возврат Неопределено;
			
		Иначе
			
			ПрефиксОбласти = ТекущиеДанные.Префикс;
			
			НаименованиеКорреспондента   = ТекущиеДанные.НаименованиеПриложения;
			ПрефиксОбластиКорреспондента = ТекущиеДанные.ПрефиксКорреспондента;
			
			КонечнаяТочка 				= ТекущиеДанные.КонечнаяТочка;
			КонечнаяТочкаКорреспондента = ТекущиеДанные.КонечнаяТочкаКорреспондента;
			ОбластьДанныхКорреспондента = ТекущиеДанные.ОбластьДанных;
			
			Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" Тогда
				
				ВидПодключения = "Интернет";
								
			Иначе
				
				ВидПодключения = "";
				
				ИнтернетВебАдрес		= "";
				ИнтернетИмяПользователя = "";
				ИнтернетПароль          = "";
				ИнтернетЗапомнитьПароль = Ложь;
				
			КонецЕсли;
				
		КонецЕсли;
		
	ИначеЕсли СпособНастройкиПодключенияВСервисе = "ИнтернетВручную" Тогда
		
		Если ВидПодключения = "ОбычныеКаналыСвязи"
			И ЗагрузитьПараметрыПодключенияИзФайла Тогда
			Если ПустаяСтрока(ИмяФайлаНастроекПодключенияДляЗагрузки) Тогда
				ОбщегоНазначенияКлиент.СообщитьПользователю(
					НСтр("ru = 'Выберите файл с настройками подключения.'"),
					, "ИмяФайлаНастроекПодключенияДляЗагрузки", , Отказ);
				Возврат Неопределено;
			КонецЕсли;
		ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда
			Если ПустаяСтрока(ИмяФайлаНастроекXDTOКорреспондента) Тогда
				ОбщегоНазначенияКлиент.СообщитьПользователю(
					НСтр("ru = 'Выберите файл с настройками программы-корреспондента.'"),
					, "ИмяФайлаНастроекXDTOКорреспондента", , Отказ);
				Возврат Неопределено;
			КонецЕсли;
		КонецЕсли;
		
		ОбластьДанныхКорреспондента = 0;
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)
	
	Если (Не МодельСервиса И ВидПодключения <> "Интернет") 
		Или (МодельСервиса И СпособНастройкиПодключенияВСервисе <> "ИнтернетВручную") Тогда
		ПропуститьСтраницу = Истина;
		Возврат Неопределено;
	КонецЕсли;
	
	Элементы.ПараметрыДоступаВИнтернет1.Видимость = ДоступнаНастройкаПараметровДоступаВИнтернет;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриПереходеДалее(Отказ)
	
	Если ВидПодключения <> "Интернет" Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Если ПустаяСтрока(ИнтернетВебАдрес) И СпособНастройкиПодключенияВСервисе <> "ИнтернетАвто" Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Укажите адрес программы в Интернет.'"),
			, "ИнтернетВебАдрес", , Отказ);
		Возврат Неопределено;
	КонецЕсли;
	
	ИнтернетВебАдрес = СокрЛП(ИнтернетВебАдрес);
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)
	
	Если МодельСервиса Тогда
		ПропуститьСтраницу = Истина;
	КонецЕсли;
	
	Если ВидПодключения <> "ВнешнееСоединение" Тогда
		ПропуститьСтраницу = Истина;
	КонецЕсли;
	
	ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы();
	ПриИзмененииВнешнееСоединениеВидАутентификации();
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриПереходеДалее(Отказ)
	
	Если ВидПодключения <> "ВнешнееСоединение" Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Если ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый" Тогда
		
		Если ПустаяСтрока(ВнешнееСоединениеКаталогИнформационнойБазы) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Выберите каталог расположения информационной базы.'"),
				, "ВнешнееСоединениеКаталогИнформационнойБазы", , Отказ);
			Возврат Неопределено;
		КонецЕсли;
		
	ИначеЕсли ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный" Тогда
		
		Если ПустаяСтрока(ВнешнееСоединениеКластерСерверов) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите имя кластера серверов 1С:Предприятия.'"),
				, "ВнешнееСоединениеКластерСерверов", , Отказ);
			Возврат Неопределено;
		КонецЕсли;
		
		Если ПустаяСтрока(ВнешнееСоединениеИмяИнформационнойБазы) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите имя информационной базы в кластере серверов 1С:Предприятия.'"),
				, "ВнешнееСоединениеИмяИнформационнойБазы", , Отказ);
			Возврат Неопределено;
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)
	
	Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда
		ПропуститьСтраницу = Истина;
		Возврат Неопределено;
	КонецЕсли;
	
	ДополнительныеПараметрыНастройки = Новый Структура;
	ДополнительныеПараметрыНастройки.Вставить("ЭтоПереходДалее", ЭтоПереходДалее);
	ОповещениеПродолжениеНастройки = Новый ОписаниеОповещения("ПродолжениеНастройкиПараметрыПодключенияОбычныеКаналыСвязи",
		ЭтотОбъект, ДополнительныеПараметрыНастройки);
	
	Если ЭтоПереходДалее
		И ЗагрузитьПараметрыПодключенияИзФайла Тогда
		// Загрузка настроек из файла.
		ДополнительныеПараметры = Новый Структура;
		ДополнительныеПараметры.Вставить("Оповещение", ОповещениеПродолжениеНастройки);
		
		ОповещениеОЗавершении = Новый ОписаниеОповещения("ПриЗавершенииПомещенияФайлаНастроекПодключенияДляЗагрузки", ЭтотОбъект, ДополнительныеПараметры);
		
		ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
		ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
		ПараметрыЗагрузки.Интерактивно = Ложь;
		
		ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершении, ПараметрыЗагрузки, ИмяФайлаНастроекПодключенияДляЗагрузки);
	Иначе
		Результат = Новый Структура;
		Результат.Вставить("Отказ", Ложь);
		Результат.Вставить("СообщениеОбОшибке", "");
		
		ВыполнитьОбработкуОповещения(ОповещениеПродолжениеНастройки, Результат);
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее(Отказ)
	
	Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Если Не ОбычныеКаналыСвязиFILEИспользование
		И Не ОбычныеКаналыСвязиFTPИспользование
		И Не ОбычныеКаналыСвязиEMAILИспользование Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Выберите хотя бы один способ передачи файлов с данными.'"),
			, "ОбычныеКаналыСвязиFILEИспользование", , Отказ);
		Возврат Неопределено;
	КонецЕсли;
	
	Если ОбычныеКаналыСвязиАрхивироватьФайлы
		И ОбычныеКаналыСвязиИспользоватьПарольДляАрхива
		И ПустаяСтрока(ОбычныеКаналыСвязиПарольАрхива) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Укажите пароль для архивации файлов.'"),
			, "ОбычныеКаналыСвязиПарольАрхива", , Отказ);
		Возврат Неопределено;
	КонецЕсли;
	
	Если ОбычныеКаналыСвязиFILEИспользование Тогда
		
		Если ПустаяСтрока(ОбычныеКаналыСвязиFILEКаталог) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Выберите каталог для передачи файлов с данными.'"),
				, "ОбычныеКаналыСвязиFILEКаталог", , Отказ);
			Возврат Неопределено;
		КонецЕсли;
		
	КонецЕсли;
	
	Если ОбычныеКаналыСвязиFTPИспользование Тогда
		
		Если ПустаяСтрока(ОбычныеКаналыСвязиFTPПуть) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите адрес каталога для передачи файлов с данными.'"),
				, "ОбычныеКаналыСвязиFTPПуть", , Отказ);
			Возврат Неопределено;
		КонецЕсли;
		
		Если ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла
			И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите максимальный допустимый размер файлов с данными.'"),
				, "ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла", , Отказ);
			Возврат Неопределено;
		КонецЕсли;

	КонецЕсли;
	
	Если ОбычныеКаналыСвязиEMAILИспользование Тогда
		
		Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILУчетнаяЗапись) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Выберите учетную запись электронной почты для отправки сообщений с данными.'"),
				, "ОбычныеКаналыСвязиEMAILУчетнаяЗапись", , Отказ);
			Возврат Неопределено;
		КонецЕсли;
		
		Если ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения
			И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите максимальный допустимый размер почтового вложения.'"),
				, "ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения", , Отказ);
			Возврат Неопределено;
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПроверкаПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)
	
	Если ВидПодключения = "ПассивныйРежим" Тогда
		
		ПропуститьСтраницу = Истина;
		
	ИначеЕсли ВидПодключения = "ВнешнееСоединение"
		Или ВидПодключения = "Интернет"
		Или МодельСервиса Тогда
		
		Элементы.ПанельПроверкаПодключения.ТекущаяСтраница = Элементы.СтраницаПроверкаПодключенияOnline;
		
	ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда
		
		Элементы.ПанельПроверкаПодключения.ТекущаяСтраница = Элементы.СтраницаПроверкаПодключенияOffline;
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее)
	
	ПерейтиДалее = Ложь;
	
	Если ВидПодключения = "ПассивныйРежим" Тогда
		
		ПерейтиДалее = Истина;
		
	ИначеЕсли ВидПодключения = "ВнешнееСоединение"
		Или ВидПодключения = "Интернет" Тогда
		
		Если ВидПодключения = "ВнешнееСоединение"
			И ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда
			Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьCOMСоединительЗавершение", ЭтотОбъект);
			
			СтруктураПодключения = Новый Структура;
			СтруктураПодключения.Вставить("COMВариантРаботыИнформационнойБазы",ВнешнееСоединениеВариантРаботыИнформационнойБазы);
			СтруктураПодключения.Вставить("COMКаталогИнформационнойБазы", ВнешнееСоединениеКаталогИнформационнойБазы);
			СтруктураПодключения.Вставить("COMИмяСервера1СПредприятия", ВнешнееСоединениеКластерСерверов);
			СтруктураПодключения.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия",ВнешнееСоединениеИмяИнформационнойБазы);
			СтруктураПодключения.Вставить("COMАутентификацияОперационнойСистемы", ВнешнееСоединениеВидАутентификации);
			СтруктураПодключения.Вставить("COMИмяПользователя", ВнешнееСоединениеИмяПользователя);
			СтруктураПодключения.Вставить("COMПарольПользователя", ВнешнееСоединениеПароль);
			
			ОбменДаннымиКлиент.ПроверитьИЗарегистрироватьCOMСоединитель(СтруктураПодключения, Оповещение);

		Иначе
			ПриНачалеПроверкиПодключенияOnline();
		КонецЕсли;
		
	ИначеЕсли МодельСервиса Тогда
		
		ПриНачалеПроверкиПодключенияВМоделиСервиса();
		
	ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда
		
		ПриНачалеПроверкиПодключенияOffline();
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)
	
	ДополнительныеПараметрыНастройки = Новый Структура;
	ДополнительныеПараметрыНастройки.Вставить("ЭтоПереходДалее", ЭтоПереходДалее);
	ОповещениеПродолжениеНастройки = Новый ОписаниеОповещения("ПродолжениеНастройкиОбщиеНастройкиСинхронизации",
		ЭтотОбъект, ДополнительныеПараметрыНастройки);
	
	Если ЭтоПереходДалее
		И ВидПодключения = "ПассивныйРежим" Тогда
		// Загрузка настроек корреспондента из файла.
		ДополнительныеПараметры = Новый Структура;
		ДополнительныеПараметры.Вставить("Оповещение", ОповещениеПродолжениеНастройки);
		
		ОповещениеОЗавершении = Новый ОписаниеОповещения("ПриЗавершенииПомещенияФайлаНастроекXDTOКорреспондента", ЭтотОбъект, ДополнительныеПараметры);
		
		ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
		ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
		ПараметрыЗагрузки.Интерактивно = Ложь;
		
		ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершении, ПараметрыЗагрузки, ИмяФайлаНастроекXDTOКорреспондента);
	Иначе
		
		Результат = Новый Структура;
		Результат.Вставить("Отказ", Ложь);
		Результат.Вставить("СообщениеОбОшибке", "");
		
		ВыполнитьОбработкуОповещения(ОповещениеПродолжениеНастройки, Результат);
		
	КонецЕсли;
	
	Если УзелКорреспондентаЕстьВЭтойБазе Или ЭтотУзелЕстьВКорреспонденте Тогда
	
		Элементы.ГруппаДублированиеНастроекСинхронизации.Видимость = Истина;
		
		Подсказки = Новый Массив;
		
		Если ЭтотУзелЕстьВКорреспонденте Тогда
			ТекстПодсказки = НСтр("ru = '- Новый код для текущего узла информационной базы'");
			Подсказки.Добавить(ТекстПодсказки);
		КонецЕсли;
		
		Если УзелКорреспондентаЕстьВЭтойБазе Тогда
			ТекстПодсказки = НСтр("ru = '- Удаление узла ""%1""'");
			ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, УзелДляУдаления);
			Подсказки.Добавить(ТекстПодсказки);
		КонецЕсли;
		
		Элементы.ДекорацияПояснениеКИсправить.Заголовок = СтрСоединить(Подсказки, Символы.ПС);
		
	Иначе	
		
		Элементы.ГруппаДублированиеНастроекСинхронизации.Видимость = Ложь;
		
	КонецЕсли;
		
	Элементы.ГруппаВосстановлениеНастроекОбмена.Видимость = 
		ВосстановлениеНастроекОбмена = "ВосстановлениеСПредупреждением";
		
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее(Отказ)
	
	Если Не ВидПодключения = "ПассивныйРежим" Тогда
	
		Если ДоступноИзменениеНаименования
			И ПустаяСтрока(Наименование) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите наименование этой программы.'"),
				, "Наименование", , Отказ);
		КонецЕсли;
			
		Если ДоступноИзменениеПрефикса
			И ПустаяСтрока(Префикс) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите префикс этой программы.'"),
				, "Префикс", , Отказ);
		КонецЕсли;
			
	КонецЕсли;
	
	Если ДоступноИзменениеНаименованияКорреспондента
		И ПустаяСтрока(НаименованиеКорреспондента) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Укажите наименование программы-корреспондента.'"),
			, "НаименованиеКорреспондента", , Отказ);
	КонецЕсли;
		
	Если Не ВидПодключения = "ПассивныйРежим" Тогда
	
		Если ДоступноИзменениеПрефиксаКорреспондента
			И ПустаяСтрока(ПрефиксКорреспондента) Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Укажите префикс программы-корреспондента.'"),
				, "ПрефиксКорреспондента", , Отказ);
		КонецЕсли;
			
	КонецЕсли;
	
	Если СохранитьПараметрыПодключенияВФайл
		И ПустаяСтрока(ИмяФайлаНастроекПодключенияДляВыгрузки) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Укажите путь к файлу для сохранения настроек подключения.'"),
			, "ИмяФайлаНастроекПодключенияДляВыгрузки", , Отказ);
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаКлиенте
Функция Подключаемый_СтраницаСохранениеНастроекПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее)
	
	ПерейтиДалее = Ложь;
	ПриНачалеСохраненияНастроекПодключения();
	
	Возврат Неопределено;
	
КонецФункции

#КонецОбласти

#Область ДополнительныеОбработчикиПереходов

&НаКлиенте
Процедура ИзменитьПорядковыйНомерПерехода(Итератор)
	
	ОчиститьСообщения();
	
	УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьПорядковыйНомерПерехода(Знач Значение)
	
	ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода);
	
	ПорядковыйНомерПерехода = Значение;
	
	Если ПорядковыйНомерПерехода < 1 Тогда
		
		ПорядковыйНомерПерехода = 1;
		
	КонецЕсли;
	
	ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее);
	
КонецПроцедуры

&НаКлиенте
Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее)
	
	// Выполняем обработчики событий перехода.
	ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее);
	
	// Устанавливаем отображение страниц.
	СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода));
	
	Если СтрокиПереходаТекущие.Количество() = 0 Тогда
		ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'");
	КонецЕсли;
	
	СтрокаПереходаТекущая = СтрокиПереходаТекущие[0];
	
	Элементы.ПанельОсновная.ТекущаяСтраница  = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы];
	Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации];
	
	Элементы.ПанельНавигации.ТекущаяСтраница.Доступность = Не (ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация);
	
	// Устанавливаем текущую кнопку по умолчанию.
	КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее");
	
	Если КнопкаДалее <> Неопределено Тогда
		
		КнопкаДалее.КнопкаПоУмолчанию = Истина;
		
	Иначе
		
		КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово");
		
		Если КнопкаГотово <> Неопределено Тогда
			
			КнопкаГотово.КнопкаПоУмолчанию = Истина;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда
		
		ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее)
	
	// Обработчики событий переходов.
	Если ЭтоПереходДалее Тогда
		
		СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1));
		
		Если СтрокиПерехода.Количество() > 0 Тогда
			СтрокаПерехода = СтрокиПерехода[0];
		
			// Обработчик ПриПереходеДалее.
			Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее)
				И Не СтрокаПерехода.ДлительнаяОперация Тогда
				
				ИмяПроцедуры = "[ИмяОбработчика](Отказ)";
				ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее);
				
				Отказ = Ложь;
				
				Результат = Вычислить(ИмяПроцедуры);
				
				Если Отказ Тогда
					
					УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1);
					
					Возврат;
					
				КонецЕсли;
				
			КонецЕсли;
		КонецЕсли;
		
	Иначе
		
		СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1));
		
		Если СтрокиПерехода.Количество() > 0 Тогда
			СтрокаПерехода = СтрокиПерехода[0];
		
			// Обработчик ПриПереходеНазад.
			Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад)
				И Не СтрокаПерехода.ДлительнаяОперация Тогда
				
				ИмяПроцедуры = "[ИмяОбработчика](Отказ)";
				ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад);
				
				Отказ = Ложь;
				
				Результат = Вычислить(ИмяПроцедуры);
				
				Если Отказ Тогда
					
					УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1);
					
					Возврат;
					
				КонецЕсли;
				
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;
	
	СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода));
	
	Если СтрокиПереходаТекущие.Количество() = 0 Тогда
		ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'");
	КонецЕсли;
	
	СтрокаПереходаТекущая = СтрокиПереходаТекущие[0];
	
	Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда
		
		УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1);
		Возврат;
	КонецЕсли;
	
	// обработчик ПриОткрытии
	Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда
		
		ИмяПроцедуры = "[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)";
		ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии);
		
		Отказ = Ложь;
		ПропуститьСтраницу = Ложь;
		
		Результат = Вычислить(ИмяПроцедуры);
		
		Если Отказ Тогда
			
			УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1);
			
			Возврат;
			
		ИначеЕсли ПропуститьСтраницу Тогда
			
			Если ЭтоПереходДалее Тогда
				
				УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1);
				
				Возврат;
				
			Иначе
				
				УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1);
				
				Возврат;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьОбработчикДлительнойОперации()
	
	СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода));
	
	Если СтрокиПереходаТекущие.Количество() = 0 Тогда
		ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'");
	КонецЕсли;
	
	СтрокаПереходаТекущая = СтрокиПереходаТекущие[0];
	
	// Обработчик ОбработкаДлительнойОперации.
	Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда
		
		ИмяПроцедуры = "[ИмяОбработчика](Отказ, ПерейтиДалее)";
		ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации);
		
		Отказ = Ложь;
		ПерейтиДалее = Истина;
		
		Результат = Вычислить(ИмяПроцедуры);
		
		Если Отказ Тогда
			
			УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1);
			
			Возврат;
			
		ИначеЕсли ПерейтиДалее Тогда
			
			УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1);
			
			Возврат;
			
		КонецЕсли;
		
	Иначе
		
		УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1);
		
		Возврат;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды)
	
	Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл
		
		Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда
			
			ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды);
			
			Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда
				
				Возврат ЭлементФормыПоИмениКоманды;
				
			КонецЕсли;
			
		ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы")
			И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда
			
			Возврат Элемент;
			
		Иначе
			
			Продолжить;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Неопределено;
	
КонецФункции

#КонецОбласти

#КонецОбласти